# -*- coding: utf-8 -*-
"""
------------------------------------------------------------------------------
    File Name:  dense_demo
    Author   :  wanwei1029
    Date     :  2018-12-18
    Desc     :  dense也就是全连接层，有两种用途，一种作为模型的第一种，此时需要指定输入shape,对应参数：input_shape=(16,)
                如果作为中间层，则不需要指定，只需指定输出维度即可。
------------------------------------------------------------------------------
"""
from keras.models import Sequential
from keras.layers.core import Dense


def demo():
    """
    Dense是一个全连接层，实现如下操作：output = activation(dot(input, kernel) + bias)
    其中：
    activation是参数中指定的激活函数，未指定就不使用。
    kernel是一个权重矩阵，系统创建。
    bias是一个向量，也是系统创建，当use_bias为True(默认）有效

    Dense 参数详解：
    units, #代表该层的输出维度，第一个参数，必须的。
    activation=None, #激活函数.但是默认 liner(a(x) = x)，也就是没有激活函数。
    use_bias=True, #是否使用b
    kernel_initializer='glorot_uniform',, #初始化w权重，keras/initializers.py
    bias_initializer='zeros', #初始化b权重
    kernel_regularizer=None, #施加在权重w上的正则项,keras/regularizer.py
    bias_regularizer=None, #施加在偏置向量b上的正则项
    activity_regularizer=None, #施加在输出上的正则项
    kernel_constraint=None, #施加在权重w上的约束项
    bias_constraint=None #施加在偏置b上的约束项

    """
    model = Sequential()
    model.add(Dense(32, input_shape=(16,)))
    # 如果非第一层，不需要指定input_shape


if __name__ == '__main__':
    test_method = "demo"
    if test_method == "demo":
        demo()
